package com.shujia.day02;

public class Demo01Var {
    public static void main(String[] args) {
        /*
            TODO Java中的变量表示：
                Java是一个静态类型语言，在定义变量时，必须指定变量的类型，类型一旦确定无法更改

           TODO Java中的变量类型
                1.基本数据类型(8种)
                    byte short int long float double boolean char (Java中的关键字，都是小写)
                    整数类型：
                        byte short int long
                        长度:（1个字节保存 8个比特 0 0000000）
                        byte 1字节  -128~127 =?> 对于原码在最高位保留一个bit用于存储符号 负号少1
                        short 2字节 -2^15~2^15-1
                        int 4 字节
                        long 8 字节  => 对于long类型的值在定义时，规范要求值后加上l/L进行标记
                      注意：
                        对于Java在整型数据定义时，默认数据为int类型
                    小数类型：
                        float double
                        float 4 字节  => 在定义数据时，需要在数值后添加 f/F标记
                        double 8 字节
                        注意：
                        当定义小数数据时，默认类型为 double 类型
                    布尔值
                        boolean
                        注意：值只能存在 true / false 有严格的大小写区分
                    字符
                        char
                        注意：
                            1.字符串String类型并不是基本数据类型中的一种
                            2.对于char只能使用''来表示数据，并且只能存在一个字符
                2.引用数据类型（面向对象）=> 其类型除了数组基本都可以使用首字母大写形式表示类型
                    1.类： 字符串是属于类中的一种，类是由class修饰的一种类型
                    2.接口：是一种特殊的类，只定义具体的规范，不能直接通过其对象进行操作
                    3.数组：是一种数据集合 其定义的方式为  类型[] 表示一个集合中可以包含多个该类型的数据

           TODO 如何定义类型
                格式：
                    类型 变量名
                赋值：
                   ① 类型 变量名 = 值  /  ②类型 变量名 = new 类型对象
                对于基本数据类型只能通过 ① 方式进行赋值

           TODO 类型之间如何转换
                1.隐式转换：
                    从低精度的类型转高精度类型 可以实现自动赋值转换
                        但是高精度向低精度转换会报错  会造成精度丢失的问题
                2.显示转换（强制类型转换）
                    格式： to类型 变量名 = (to类型)其他类型值
                    注意：并不是所有的类型都可以使用强制类型转换 基本数类型之间可以进行转换 但是跨大类型和Bool不行
         */
//        byte b;
//        System.out.println(b);  变量在定义后使用时，必须要对其进行初始化赋值

        byte b1= 100;
//        byte b2= 100.1;
//        byte b2 = 129;  每个基本数据类型都有其存储数据的规范：包括值类型和长度
        System.out.println(b1);

        short short1 = 10;
        int int1 = 100;
//        long long1 = 100000000000; // 该值在 2^31到2^63之间 此时定义会报错
        long long1 = 100; //
        long long2 = 100000000000L; //
        long long3 = 100000000000l;

        System.out.println(long2);
        System.out.println(long3);

        float f1 = 3.14f;
        float f2 = 3.14F;
        System.out.println(f1);

        double d1 = 3.14;
        double d2 = 3.14d;
        double d3 = 3.14D;
        System.out.println(d1);


        boolean bool1 = true;
        boolean bool2 = false;
//        boolean bool3 = 0;

        char ch1 = 'a';
//        char ch2 = "a";
        System.out.println(ch1);


        // TODO 类型转换

        byte byte1 = 10;
        int toInt = byte1;
        System.out.println(toInt);

        short toShort = (short) toInt;
        System.out.println(toShort);

        // 字符串类型
        String str1 = "10";
//        short str2Short= (short)str1
//        int str2Short= (int)str1
        double short2Double = (double)toShort;
        char short2char = (char)toShort;
//        boolean short2bool = (boolean)toShort;



    }
}
